perm filename MYPUB[MBS,LCS] blob
sn#276923 filedate 1977-04-18 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .<< BASED ON General PUB Macros in GENRAL.PUB[SUB,SYS]
C00003 00003 . DEVICE XGP
C00010 00004 .<< Digest number of sides per page and columns per side. >>
C00012 00005 .<< Set line spacing to new value. >>
C00013 00006 .<< Number sections. >>
C00019 00007 .<< Start text justification. >>
C00020 00008 .<< Put in a footnote. >>
C00021 00009 .<< Generate table of contents. >>
C00023 00010 .<< Set up for body of text. >>
C00024 ENDMK
C⊗;
.<< BASED ON General PUB Macros in GENRAL.PUB[SUB,SYS]
. Version 1.1, 4 March 1976
. Brian P. McCune
. ALTERED BY GHB, 13 MAR. 1977
.Documentation for this set of general PUB macros is in GENRAL.BPM[UP,DOC]. >>
. DEVICE XGP;
. SIDES ← 1;
. INSERT CONTENTS;
.<< Set up fonts and text responses for device selected. >>
.
.START "XGP"
.
.<< Turn on quote character ("α") and font switching character ("%"). >>
.
.TURN ON "α%";
.
.<< Declare Baskerville fonts, FIX25 for special characters, and SUP for footnote
.numbers. >>
.
.FONT 1 "BASL30";
.FONT 2 "BASI30";
.FONT 3 "BASB30";
.FONT 4 "FIX25";
.FONT 5 "SUP";
.FONT 6 "ZERO30";
.
.<< Put in ligatures in all three Baskerville fonts. >>
.
.AT "ffl" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "α∞" ELSE "αfαfαl"; ⊃;
.AT "ffi" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "α≠" ELSE "αfαfαi"; ⊃;
.AT "ff" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "α≥" ELSE "αfαf"; ⊃;
.AT "fi" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "α≡" ELSE "αfαi"; ⊃;
.AT "fl" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "α∨" ELSE "αfαl"; ⊃;
.
.<< Provide Stanford ASCII characters not available in Baskerville. >>
.
.AT "¬" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "%4α¬%*" ELSE "α¬"; ⊃;
.AT "ε" ⊂ IF THISFONT = 1 THEN "%2αε%*" ELSE "αε"; ⊃;
.AT "∞" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "%4α∞%*" ELSE "α∞"; ⊃;
.AT "∀" ⊂ IF THISFONT = 1 THEN "%2α∀%*" ELSE "α∀"; ⊃;
.AT "~" ⊂ IF THISFONT = 2 THEN "%1α~%*" ELSE "α~"; ⊃;
.AT "≠" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "%4α≠%*" ELSE "α≠"; ⊃;
.AT "≥" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "%4α≥%*" ELSE "α≥"; ⊃;
.AT "≡" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "%4α≡%*" ELSE "α≡"; ⊃;
.AT "∨" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "%4α∨%*" ELSE "α∨"; ⊃;
.
.<< Convert two successive Baskerville hyphens into em dash. >>
.
.AT "--" ⊂ IF 1 ≤ THISFONT ≤ 3 THEN "α¬" ELSE "α--"; ⊃;
.
.<< Convert pair of double quotes into pair of open and close double quotes. >>
.
.QUOTE ← 0;
.AT """"
. ⊂
. IF 1 ≤ THISFONT ≤ 3
. THEN
. START "CHANGE"
. IF EVEN QUOTE THEN "α`α`" ELSE "α'α'";
. QUOTE ← QUOTE + 1;
. END "CHANGE"
. ELSE "α""";
. ⊃;
.
.
.<< make up diacriticals >>
.
.AT ":a" ⊂ "%6α:%*a" ⊃;
.AT ":o" ⊂ "%6α:%*o" ⊃;
.AT ":u" ⊂ "%6α:%*u" ⊃;
.AT "'a" ⊂ "%6α'%*a" ⊃;
.AT "'e" ⊂ "%6α'%*e" ⊃;
.AT "'o" ⊂ "%6α'%*o" ⊃;
.AT "'u" ⊂ "%6α'%*u" ⊃;
.AT "`a" ⊂ "%6α`%*a" ⊃;
.AT "`e" ⊂ "%6α`%*e" ⊃;
.AT "`o" ⊂ "%6α`%*o" ⊃;
.AT "`u" ⊂ "%6α`%*u" ⊃;
.AT "∧a" ⊂ "%6α∧%*a" ⊃;
.AT "∧e" ⊂ "%6α∧%*e" ⊃;
.AT "∧i" ⊂ "%6α∧%*i" ⊃;
.AT "∧o" ⊂ "%6α∧%*o" ⊃;
.AT "∧u" ⊂ "%6α∧%*u" ⊃;
.AT ",c" ⊂ "%6α,%*c" ⊃;
.
.
.<< Print in //italics/ or ⊗⊗boldface⊗. >>
.
.AT "//" ENTRY "/"
. ⊂
. LASTFONT1 ← THISFONT;
. ("%2ENTRY%" & LASTFONT1);
. ⊃;
.
.AT "⊗⊗" ENTRY "⊗"
. ⊂
. LASTFONT2 ← THISFONT;
. ("%3ENTRY%" & LASTFONT2);
. ⊃;
.
.<< Print page headings on XGP (using boldface) before new page started. >>
.
.RECURSIVE MACRO STANDARD TITLES
. ⊂
. IF !HF THEN
. BEGIN "OUTPUT HEADING"
. NOFILL;
. TURN ON "←→{";
. PREFACE 0;
. INDENT 0,0,0;
. IF EVEN PAGE
. THEN
. START "LOOK FOR EVEN PAGE HEADING"
. IF LENGTH(!EH) THEN
. START "OUTPUT EVEN PAGE HEADING"
. PLACE HEADING;
. SELECT 3;
. !EH;
. END "OUTPUT EVEN PAGE HEADING";
. END "LOOK FOR EVEN PAGE HEADING"
. ELSE
. START "LOOK FOR ODD PAGE HEADING"
. IF LENGTH(!OH) THEN
. START "OUTPUT ODD PAGE HEADING"
. PLACE HEADING;
. SELECT 3;
. !OH;
. END "OUTPUT ODD PAGE HEADING";
. END "LOOK FOR ODD PAGE HEADING";
. END "OUTPUT HEADING";
. ⊃;
.
.END "XGP"
.
.<< Digest number of sides per page and columns per side. >>
.
.<< Make sure one or two sides chosen. >>
.
.IF SIDES ≠ 1 ∧ SIDES ≠ 2 THEN USERERR("SIDES argument not 1 or 2");
.
.<< Set up page frame and COLMNS macro for selected device. >>
.
.TITLE AREA HEADING LINES 1 TO 3;
. START "XGP"
. PAGE FRAME 54 HIGH 75 WIDE;
. ODDLEFTBORDER ← EVENLEFTBORDER ← 1500;
. MACRO COLMNS(NUMCOLS)
. ⊂
. IF NUMCOLS = 1
. THEN AREA TEXT LINES 4 TO 54
. ELSE IF NUMCOLS = 2
. THEN AREA TEXT LINES 4 TO 54 IN 2 COLUMNS 5 APART
. ELSE USERERR("COLMNS argument not 1 or 2");
. COLS ← NUMCOLS;
. SSNAME ← NULL;
. PLACE TEXT;
. NEXT PAGE;
. ⊃;
. END "XGP"
.<< Set line spacing to new value. >>
.
.MACRO SPACES(NUMSPACES)
. ⊂
. IF NUMSPACES > 0
. THEN
. START "SET NEW INTER- AND INTRA-PARAGRAPH SPACING"
. BREAK;
. PREFACE NUMSPACES;
. SPREAD ← NUMSPACES;
. END "SET NEW INTER- AND INTRA-PARAGRAPH SPACING"
. ELSE USERERR("SPACES argument not positive integer");
. ⊃;
.<< Number sections. >>
.
.<< Either go to new page or not upon new section or appendix. >>
.
.MACRO NEW_PAGE_ON_SECTION(NEW_PAGE_FLAG)
. ⊂
. IF NEW_PAGE_FLAG = TRUE
. THEN MACRO NEW SECTION
. ⊂
. SKIP TO COLUMN 1;
. IF SIDES = 2 ∧ EVEN PAGE THEN NEXT PAGE;
. ⊃
. ELSE IF NEW_PAGE_FLAG = FALSE THEN MACRO NEW SECTION
. ⊂
. IF LINES < (0 + 6*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 3;
. ⊃
. ELSE USERERR("NEW_PAGE_ON_SECTION argument not TRUE or FALSE");
. ⊃;
.
.<< Generate section heading and table of contents entry. >>
.
.COUNT SECTION FROM 1 TO 99;
.MACRO S(NAME)
. ⊂
. SECNAME ← SSNAME ← NULL;
. BEGIN "PRINT SECTION HEADING"
. NEW SECTION;
. NEXT SECTION;
. TURN ON "{";
. INDENT 0,4,0;
. NOJUST;
. RETAIN;
⊗⊗{SECTION!}. NAME⊗
. SKIP 1;
. SECNAME ← "NAME";
. SEND CONTENTS
. ⊂
. INDENT 0,4,4;
. SKIP 1;
. GUARANTEE LINES 6;
{SECTION!}. NAME
.<< {SECTION!}. NAME→ {PAGE!} >>
. ⊃;
. END "PRINT SECTION HEADING";
. ⊃;
.
.<< Generate subsection heading and table of contents entry. >>
.
.COUNT SUBSECTION FROM 1 TO 99 IN SECTION PRINTING "!.1";
.MACRO SS(NAME)
. ⊂
. SSNAME ← NULL;
. BEGIN "PRINT SUBSECTION HEADING"
. IF LINES < (5 + 5*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 2;
. NEXT SUBSECTION;
. TURN ON "{";
. INDENT 3,8,0;
. NOJUST;
. RETAIN;
⊗⊗{SUBSECTION!} NAME⊗
. SSNAME ← "NAME";
. SEND CONTENTS
. ⊂
. INDENT 4,9,4;
. GUARANTEE LINES 4;
{SUBSECTION!} NAME
.<< {SUBSECTION!} NAME→ {PAGE!} >>
. ⊃;
. END "PRINT SUBSECTION HEADING";
. ⊃;
.
.<< Generate subsubsection heading and table of contents entry. >>
.
.COUNT SUB2 FROM 1 TO 99 IN SUBSECTION PRINTING "!.1";
.MACRO SSS(NAME)
. ⊂
. BEGIN "PRINT SUBSUBSECTION HEADING"
. IF LINES < (4 + 4*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 1;
. NEXT SUB2;
. TURN ON "{";
. INDENT 6,13,0;
. NOJUST;
. RETAIN;
⊗⊗{SUB2!} NAME⊗
. SEND CONTENTS
. ⊂
. INDENT 9,16,4;
. GUARANTEE LINES 2;
{SUB2!} NAME
.<< {SUB2!} NAME→ {PAGE!} >>
. ⊃;
. END "PRINT SUBSUBSECTION HEADING";
. ⊃;
.
.COUNT SUB3 FROM 1 TO 99 IN SUB2 PRINTING "!.1";
.MACRO SSSS(NAME)
. ⊂
. BEGIN "PRINT SUBSUBSUBSECTION HEADING"
. IF LINES < (4 + 4*SPREAD) THEN SKIP TO LINE 1 ELSE SKIP 1;
. NEXT SUB3;
. TURN ON "{";
. INDENT 9,17,0;
. NOJUST;
. RETAIN;
⊗⊗{SUB3!} NAME⊗
. SEND CONTENTS
. ⊂
. INDENT 14,23,4;
. GUARANTEE LINES 2;
{SUB3!} NAME
.<< {SUB2!} NAME→ {PAGE!} >>
. ⊃;
. END "PRINT SUBSUBSUBSECTION HEADING";
. ⊃;
.
.<< Generate appendix heading and table of contents entry. >>
.
.COUNT APPENDIX FROM 1 TO 99 PRINTING "A";
.MACRO APP(NAME)
. ⊂
. SECNAME ← SSNAME ← NULL;
. BEGIN "PRINT APPENDIX HEADING"
. NEW SECTION;
. NEXT APPENDIX;
. TURN ON "{";
. INDENT 0,4,0;
. NOJUST;
. RETAIN;
⊗⊗Appendix {APPENDIX!}. NAME⊗
. SKIP 1;
. SECNAME ← "Appendix " & APPENDIX!;
. SSNAME ← "NAME";
. IF APPENDIX = 1 THEN
. BEGIN "FIRST TIME"
. SECTYPE ← "Appendix";
. SEND CONTENTS
. ⊂
. IF LINES < (6 + 4*SPREAD)
. THEN SKIP TO LINE 1
. ELSE SKIP 2;
. INDENT 12,18,0;
⊗⊗Appendix→Page⊗
. ⊃;
. IF SIDES = 1 THEN EVERY HEADING({SECNAME},{SSNAME},{PAGE!});
. END "FIRST TIME";
. SEND CONTENTS
. ⊂
. SKIP 1;
. INDENT 0,4,4;
. GUARANTEE LINES 2;
{APPENDIX!}. NAME→ {PAGE!}
. ⊃;
. END "PRINT APPENDIX HEADING";
. ⊃;
.
.<< Generate centered subtitle heading without table of contents entry. >>
.
.MACRO CB(TITLE)
. ⊂
. BEGIN "PRINT CENTERED HEADING"
. TURN ON "←";
. IF LINES < (3 + 3*SPREAD) THEN SKIP TO LINE 1;
⊗⊗←TITLE⊗
. END "PRINT CENTERED HEADING";
. ⊃;
.<< Start text justification. >>
.
.MACRO JUSTIFY
. ⊂
. FILL;
. ADJUST;
. RETAIN;
. ⊃;
.<< Put in a footnote. >>
.
.COUNT FOOTNOTE INLINE FROM 1 TO 999 IN SECTION PRINTING
. (IF THISDEVICE = "XGP" THEN "%51%*" ELSE "[1]");
.FOOTSEP ← "__________";
.AT "∪∪" ENTRY "∪"
. ⊂
. NEXT FOOTNOTE;
. FOOTNOTE!;
. SEND FOOT
. ⊂
. BEGIN "NEXT FOOTNOTE"
. SELECT 1;
. JUSTIFY;
. SPACES 1;
. INDENT 0,0,0;
. (FOOTNOTE! & " ");
ENTRY
. END "NEXT FOOTNOTE";
. ⊃;
. ⊃;
.<< Generate table of contents. >>
.
.MACRO COLLECT CONTENTS
. ⊂
. COUNT PAGE FROM 1 TO 99 PRINTING "i";
.<< IF SIDES = 2
. THEN
. START "TWO SIDED HEADING"
. ODD HEADING(,Table of Contents,{PAGE!});
. EVEN HEADING({PAGE!},Table of Contents,);
. END "TWO SIDED HEADING"
. ELSE EVERY HEADING(,Table of Contents,{PAGE!}); >>
. PORTION CONTENTS;
. PLACE HEADING;
. PLACE TEXT;
. FILL;
. NOJUST;
. RETAIN;
. CRBREAK;
. PREFACE SPREAD - 1;
. TURN ON "{→";
. SECTYPE ← "Section";
. MACRO GUARANTEE LINES(MINIMUM_LINES)
. ⊂
. IF LINES < (MINIMUM_LINES*SPREAD + SPREAD - 1) THEN
. BEGIN "NEW COLUMN"
. SKIP TO LINE 1;
. INDENT 12,18,0;
⊗⊗{SECTYPE}→Page⊗
. END "NEW COLUMN";
. ⊃;
. INDENT 12,18,0;
.<< ⊗⊗Section→Page⊗ >>
. RECEIVE;
. ⊃;
.<< Set up for body of text. >>
.
.PORTION MAIN
.
.IF SIDES = 2
. THEN
. START "TWO SIDED HEADING"
. EVEN HEADING({PAGE!},,{SECNAME});
. ODD HEADING({SSNAME},,{PAGE!});
. END "TWO SIDED HEADING"
. ELSE EVERY HEADING(,{PAGE!},);
.SECNAME ← SSNAME ← NULL;
.PLACE HEADING;
.
.PLACE TEXT;
.SELECT 1;
.JUSTIFY;
. COLMNS 1;
. SPACES 2;
. NEW_PAGE_ON_SECTION FALSE;
. INDENT 5;